类型擦除:一种编程语言/编译器实现策略——在编译后或运行时不保留(或不完全保留)泛型/参数化类型信息,把它“擦除”为较通用的类型(如 Object)或以其他方式实现,从而在运行时难以直接获取具体的类型参数。常见于 Java 的泛型(与部分语言的“类型具化 reification”相对)。
/taɪp ɪˈreɪʒər/
Java uses type erasure for generics, so List<String> and List<Integer> look similar at runtime.
Java 对泛型使用类型擦除,因此在运行时 List<String> 和 List<Integer> 看起来很相似。
Because of type erasure, some generic type checks must be done at compile time rather than with runtime reflection.
由于类型擦除,一些泛型类型检查必须在编译期完成,而不能依赖运行时反射来判断。
该术语由 type(类型) + erasure(擦除/抹去) 组合而成。在编程语言语境中,“erasure”形象地指把泛型的类型参数信息在编译阶段“抹掉”,从而让生成的字节码/运行时表示更接近非泛型时代的形式(例如为了兼容旧版本平台或减少运行时负担)。